widget: Be safe against windows losing their frame clock
authorMatthias Clasen <mclasen@redhat.com>
Wed, 23 Dec 2015 04:46:59 +0000 (23:46 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 23 Dec 2015 04:57:06 +0000 (23:57 -0500)
gdk_widget_get_frame_clock can return NULL. In particular,
this can happen when the drag window is destroyed at the end
of a DND operation. Handle this gracefully when it happens.

gtk/gtkwidget.c

index e72b563f817e79521f8fe63a0f451a29fea93897..ee11c3f130f2a97c6a1f31c7c56107c243624e7f 100644 (file)
@@ -5252,6 +5252,7 @@ gtk_widget_add_tick_callback (GtkWidget       *widget,
 {
   GtkWidgetPrivate *priv;
   GtkTickCallbackInfo *info;
+  GdkFrameClock *frame_clock;
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
 
@@ -5259,11 +5260,15 @@ gtk_widget_add_tick_callback (GtkWidget       *widget,
 
   if (priv->realized && !priv->clock_tick_id)
     {
-      GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
-      priv->clock_tick_id = g_signal_connect (frame_clock, "update",
-                                              G_CALLBACK (gtk_widget_on_frame_clock_update),
-                                              widget);
-      gdk_frame_clock_begin_updating (frame_clock);
+      frame_clock = gtk_widget_get_frame_clock (widget);
+
+      if (frame_clock)
+        {
+          priv->clock_tick_id = g_signal_connect (frame_clock, "update",
+                                                  G_CALLBACK (gtk_widget_on_frame_clock_update),
+                                                  widget);
+          gdk_frame_clock_begin_updating (frame_clock);
+        }
     }
 
   info = g_slice_new0 (GtkTickCallbackInfo);